Asymptotic Notation and Master theorem

算法渐进记号

  • Big $\Theta$ :$\Theta$ 记号渐进的给出一个函数的上界和下届,表示同阶的函数簇。

  • Big $O$:表示一个函数的渐进上界,用来限制算法的最坏情况运行时间。

  • Big $\Omega$:表示一个函数的渐进下界,算法运行的最好情况。

  • Litter $o$: 和big $O$ 定义相似,区别主要是 big$O$ 提供的上界可能和函数是同阶的,litter $o$ 表示非渐进紧确的上界。

举例



渐进记号与函数阶数的关系

其中$a,b$分别为函数$g(n),f(n)$的阶数




通常Big $\Theta$ 用来描述算法的最好和最坏的运行时间,Big $O$描述算法的最坏运行时间,Big $\Omega$描述算法的最好运行时间,经常使用的是Big $O$, 用来衡量算法的时间复杂度和空间复杂度。

主定理(master theorem)求解递归式

假设有递推关系式

$$T(n) = aT\left(\frac{n}{b}\right) + f(n)$$

其中$ a \geq 1 \mbox{, } b > 1$,n为问题规模,a为递推的子问题数量,n/b为每个子问题的规模(假设每个子问题的规模基本一样),f(n)为递推以外进行的计算工作,包含了问题分解和子问题合并的代价。

  • 情况一
    如果存在常数$\epsilon > 0$,有$f(n) = O\left( n^{\log_b (a) - \epsilon} \right)$,并且是多项式意义上的小于,那么

$$T(n) = \Theta\left( n^{\log_b a} \right)$$

  • 情况二
    如果存在常数k ≥ 0,有$f(n) = \Theta\left( n^{\log_b a} \log^{k} n \right)$那么

$$T(n) = \Theta\left( n^{\log_b a} \log^{k+1} n \right)$$

  • 情况三
    如果存在常数$\epsilon > 0$,有$f(n) = \Omega\left( n^{\log_b (a) + \epsilon} \right)$,并且是多项式意义上的大于,同时存在常数c < 1以及充分大的n,满足

$$a f\left( \frac{n}{b} \right) \le c f(n)$$

那么

$$T\left(n \right) = \Theta \left(f \left(n \right) \right)$$

简单举例:

$$T(n) = 9T\left(\frac{n}{3}\right) + n$$

对这个递归式,有a=9,b=3,f(n)=n,因此有$n^{log_b a}=n^2>n$,所以复杂度为:

$$T(n)=\Theta(n^2)$$